#ifndef __PROJECT_H__
#define __PROJECT_H__

#include <comm_class.h>
#include <comm_func.h>
#include <common.h>
// #include <proto.h>

#include "R.h"

// 业务窗口ID
enum emWindowID
{
    WINDOW_NONE = 100000,
};

#define LVXIN_WARN 0
#define LVXIN_SON 5

#define LvxinNormalColor 0xFFFFFFFF
#define LvxinWarnColor 0xFFECAD4E
#define LvxinExpiredColor 0xFFBC4444

#define GB_STAT_LAN_UNCONN 0 // offline in LAN
#define GB_STAT_LAN_CONN 1   // online in LAN, offline in WAN
#define GB_STAT_CLOUD_CONN 2 // online in WAN

typedef enum
{
    WT_HOMEWINDDOW, // 主页面

    WT_SETTTING,    // 设置页面
    WT_SCREENSAVER, // 屏保页面
} WindowType;

// 程序状态
typedef enum ProgramState
{
    PRO_STATE_NONE = 0, // 某个功能无状态

    PRO_STATE_TONGSUO,        // 童锁开启
    PRO_STATE_TONGSUO_CLOSE,  // 童锁关闭
    PRO_STATE_TONGSUO_UBABLE, // 童锁不可用

    PRO_STATE_HPCC_LVXIN, // HPCC滤芯
    PRO_STATE_PP_LVXIN,   // pp滤芯

    PRO_STATE_HPCC_LVXIN_NORMAL,  // HPCC滤芯正常
    PRO_STATE_HPCC_LVXIN_WARN,    // HPCC滤芯准备过期
    PRO_STATE_HPCC_LVXIN_EXPIRED, // HPCC滤芯已经过期

    PRO_STATE_PP_LVXIN_NORMAL,  // pp滤芯正常
    PRO_STATE_PP_LVXIN_WARN,    // pp滤芯准备过期
    PRO_STATE_PP_LVXIN_EXPIRED, // pp滤芯已经过期

    PRO_STATE_UV_KEEP_ENABLED, // UV杀菌 保持开启
    PRO_STATE_UV_RESERVATION,  // UV杀菌 预约时间开启

    PRO_STATE_ZHAOMING_CLOSE, // 照明关闭
    PRO_STATE_ZHAOMING,       // 照明开启

    PRO_STATE_COOL_NONE, // 没有开启制冷
    PRO_STATE_COOL_ING,  // 正在制冷
    PRO_STATE_COOL_DONE, // 已完成制冷

    PRO_STATE_ICE_NONE, // 没有开启制冰
    PRO_STATE_ICE_ING,  // 正在制冰
    PRO_STATE_ICE_DONE, // 已完成制冰

    PRO_STATE_NET_ONE,   // 网络 一格信号
    PRO_STATE_NET_TWO,   // 网络 两格信号
    PRO_STATE_NET_THREE, // 网络 三格信号
    PRO_STATE_NET_FULL,  // 网络 满信号

    PRO_STATE_TUYA_GW_RESET,       // 网关重置
    PRO_STATE_TUYA_GW_ACTIVED,     // 网关激活
    PRO_STATE_TUYA_GW_FIRST_START, // 网关第一次启动
    PRO_STATE_TUYA_GW_NORMAL,      // 网关激活并启动
    PRO_STATE_TUYA_GW_BLE_ACTIVED, // 连接上云端

    PRO_STATE_TUYA_UNCONN,    // 涂鸦离线
    PRO_STATE_TUYA_CONNING,   // 涂鸦连接中
    PRO_STATE_TUYA_CONN,      // 涂鸦已连接
    PRO_STATE_TUYA_LOW_POWER, // 涂鸦低功耗

    PRO_STATE_TUYA_BT_UNCONN, // 涂鸦蓝牙模式 未连接
    PRO_STATE_TUYA_BT_CONN,   // 涂鸦蓝牙模式 已连接

    PRO_STATE_SETING, // 设置

    PRO_STATE_WASH, // 开启了自定义 清洗

    PRO_AUTH_ERROR,   // 获取涂鸦授权码报错
    PRO_AUTH_SUCCESS, // 获取涂鸦授权码成功
} State;

// 应用全局数据
typedef struct tagAppGlobalData
{

    bool isBeta;               // 是否是测试版本
    int tuyaWifiStatus;        // 涂鸦wifi状态
    int tuyaBluetoothStatus;   // 涂鸦蓝牙状态
    bool isNeedUpdate;         // 是否需要更新软件
    std::string otaVersion;    // 软件更新版本号
    std::string otaVersionDes; // 软件更新的说明
    std::string otaMd5;        // 软件更新的md5
    std::string updateUrl;     // 软件更新的url
    std::string tuyaQrcode;    // 涂鸦的二维码连接
    // bool  netOk;                    // 是否连接wifi
    int volume; // 音量
    int light;  // 亮度
    // EquipmentStatus eqStatus;       // 设备状态
    int weatherTemp;             // 天气温度
    std::string weatherConImage; // 天气 图片

    int homeSelectMode; // 主页选择模式

    bool isNoRemindROLvxin;  // 是否不再提醒 RO滤芯过期
    bool isNoRemindPCTLvxin; // 是否不再提醒 PCT滤芯过期
    int ROLvxinStatus;       // RO滤芯状态
    int PCTLvxinStatus;      // PCT滤芯状态

    bool FrontSta;         // 前端状态  0：运行中 1：清洗中                            (R)
    uchar FrontWashPct;    // 前端清洗百分比 0-100%                                   (R)
    uchar FrontWashTime;   // 前端清洗时间 5-120s                                     (WR)
    uchar FrontWashCycle;  // 前端清洗周期 1-99天                                     (WR)
    uchar FrontWashWait;   // 前端距离下次清洗时间 1-99天                              (WR)
    uchar FrontSetBit;     // 前端设置位  Bit1 : 1 前端退出清洗   Bit0 : 1 前端启动清洗 (WR)
    ushort RearInTDS;      // 终端进水TDS 0-2000                               (R)
    ushort RearOutTDS;     // 终端出水TDS 0-2000                               (R)
    uchar RearPCT_Pct;     // 终端PCT剩余寿命 0-100                            (R)
    uchar RearRO_Pct;      // 终端RO剩余寿命 0-100                             (R)
    uchar RearWashPct;     // 终端冲洗进度百分比 0-100                          (R)
    uchar RearMakeSta;     // 终端制水状态 0 空闲  1 清洗中  2 制水中  3 取水中  (R)
    uint RearTotal_UseL;   // 终端总过滤水量 0-0xffffffff(L)     (R)
    uint RearRO_UseL;      // 终端RO总过滤水量 0-0xffffffff(L)   (R)
    uint RearPP_OnceUseML; // 终端PP单次用水量 0-0xffffffff(ML)  (R)
    uint RearRO_OnceUseML; // 终端Ro单次用水量 0-0xffffffff(ML)  (R)
    uchar RearSetBit;      // Bit0 : 1 终端清洗开启   Bit1: 1 终端清洗退出  Bit2: 1 终端PP复位  Bit3: 1 终端RO复位  Bit4: 1 终端总水量清零  (WR)
    uchar SoftLifeCycle;   // 软水再生周期  1-120天            (WR)
    uchar SoftLifePct;     // 软水进度  0-100                 (WR)
    uint SoftUseL;         // 软水总过滤水量 0-0xffffffff(L)   (R)
    uint SoftOnceUseML;    // 软水单次用水量 0-0xffffffff(ML)  (R)
    uchar SoftSta;         // 软水运行状态  0 正常  1 反洗  2 吸盐  3 补水  4 正洗（主机只读） (WR)
    uchar SoftSetBit;      // Bit0 : 1 软水启动再生  Bit1: 1 软水退出再生  Bit2: 1 软水累积水量清零  Bit3-5 0 无 设置为： 1 反洗 2 吸盐 3 补水 4 正洗  (WR)
    uchar SoftWashWait;    // 距离下次再生时间 1-120 天  (WR)
    ushort RealClkYear;    // 实时时钟年 0-2099    (WR)
    uchar RealClkMon;      // 实时时钟月 0-12      (WR)
    uchar RealClkDay;      // 实时时钟日 0-31      (WR)
    uchar RealClkHour;     // 实时时钟时 0-23      (WR)
    uchar RealClkMin;      // 实时时钟分 0-59      (WR)
    uchar RealClkSec;      // 实时时钟秒 0-59      (WR)
    uchar RealClkWeek;     // 实时时钟星期 0-6     (WR)
    uchar NightStartHour;  // 深夜时段开始 时 0-23 (WR)
    uchar NightStartMin;   // 深夜时段开始 分 0-59 (WR)
    uchar NightEndHour;    // 深夜时段结束 时 0-23 (WR)
    uchar NightEndMin;     // 深夜时段结束 分 0-59 (WR)
    uint ErrorCode;        // Bit0: 通讯故障 Bit1: 变频稳压泵故障  Bit2: 软水故障  Bit3: 终端取水超时故障  Bit4: 漏水故障  Bit5: 流量计故障  Bit6: 温度探头故障 Bit7: 前端净水故障  Bit8: 终端净水故障  Bit9: 缺水故障  Bit31 :盐箱缺盐  Bit30: 盐箱缺水
    uchar WiFiSta;         // WIFI状态  Bit3-0 0未连接 1配网中 2已连接路由器未连接服务器 3已连接服务器  Bit7-4 WIFI强度0-15
    uchar WiFiSet;         // SetBit   Bit1: WIFI绑定产品   Bit0: WIFI接触绑定
    ushort ProvinceCity;   // 地区代码省
    uchar DispSta;         // Bit0: 进入熄屏  Bit1: 退出熄屏  Bit2: 恢复出厂设置
    char OutTemp;          // 出水温度 -25~100   (R)
    char InTemp;           // 进水温度 -25~100   (R)
    char ColdTemp;         // 冷水温度 -25~100   (R)
    char AmbTemp;          // 环境温度 -25~100   (R)
    ushort PpFlow;         // 净水瞬间流量 0~0xFFFF(mL/min)  (R)
    ushort RoFlow;         // 纯水瞬间流量 0~0xFFFF(mL/min)  (R)
    ushort Soft1Flow;      // 软水1瞬间流量 0~0xFFFF(mL/min)  (R)
    ushort Soft2Flow;      // 软水2瞬间流量 0~0xFFFF(mL/min)  (R)
    ushort FrontCountDown; // 前端清洗倒计时 0~0xFFFF(s)  (R)
    ushort RearCountDown;  // 终端清洗倒计时 0~0xFFFF(s)  (R)
    ushort SoftCountDown;  // 软水倒计时     0~0xFFFF(s)  (R)

    int tuyaConnMode; // 涂鸦连接的 工作模式
    int McuVersion;   // MCU版本号
    bool switchNight; // 深夜模式开关

    int resetCount;
    bool AutoChildLocked; // 自动童锁
    int childLocked;      // 童锁
    bool isSuspend;       // 休眠

    bool isTestLvxin;          // 是否是测试滤芯
    int getAuthStatus;         // 获取授权
    std::string getAuthError;  // 获取授权码的error code
    int64_t lastActiveTime;    // 上次活动时间
    int64_t tuyaConnStartTime; // 涂鸦连接中的时间

    int temperature = 0; // 温度
    std::string weather = "@mipmap/icon_weather_shower"; // 天气

    tagAppGlobalData()
        : isBeta(false), tuyaBluetoothStatus(PRO_STATE_TUYA_BT_UNCONN), tuyaWifiStatus(PRO_STATE_TUYA_LOW_POWER), isNeedUpdate(false), tuyaQrcode("none"), childLocked(PRO_STATE_TONGSUO_CLOSE), isSuspend(false), resetCount(0), AutoChildLocked(true),
          weatherTemp(20), weatherConImage("@mipmap/tuyaWeather/yin"), isNoRemindROLvxin(false), isNoRemindPCTLvxin(false), RearTotal_UseL(0.0),
          RearOutTDS(15), FrontWashWait(25), SoftWashWait(16), FrontWashCycle(25), FrontWashTime(25), ProvinceCity(4400), SoftLifeCycle(25), tuyaConnMode(0x02), McuVersion(255), switchNight(false),
          RearRO_Pct(5), RearPCT_Pct(10), isTestLvxin(false),
          light(70), tuyaConnStartTime(0) {}
} AppGlobalData, APPGLOBALDATA, *LPAPPGLOBALDATA;

extern AppGlobalData g_appData;

bool isTimeRange(std::tm star_time, std::tm end_time);

#endif